#ifndef _CLASSDEF_H_
#define _CLASSDEF_H_
#include "python3/PythonGrammar30TreeConstants.h"
#include "ast/stmtType.h"
#include "ast/exprType.h"
#include "ast/exprType.h"
#include "ast/stmtType.h"
#include "ast/NameTok.h"
#include "ast/decoratorsType.h"
#include "ast/keywordType.h"
class IVisitor;
class ClassDef;
typedef QSharedPointer<ClassDef> ClassDefPtr;

class ClassDef: public stmtType
{
public:
    explicit ClassDef(const NameTokPtr& name, const ExprTypeList& bases, const StmtTypeList& body, const DecoratorsTypeList& decs, const KeywordTypeList& keywords, const exprTypePtr& starargs, const exprTypePtr& kwargs, int nodeId=JJTCLASSDEF);
    virtual ~ClassDef();
    
    
    NameTokPtr name();
    void setName(const NameTokPtr& name);
    
    ExprTypeList bases();
    void setBases(const ExprTypeList& bases);
    
    StmtTypeList body();
    void setBody(const StmtTypeList& body);
    
    DecoratorsTypeList decs();
    void setDecs(const DecoratorsTypeList& decs);
    
    KeywordTypeList keywords();
    void setKeywords(const KeywordTypeList& keywords);
    
    exprTypePtr starargs();
    void setStarargs(const exprTypePtr& starargs);
    
    exprTypePtr kwargs();
    void setKwargs(const exprTypePtr& kwargs);
    
    
    virtual QString type() const;
    virtual QString toString() const;
    virtual void accept(IVisitor* visitor, const SimpleNodePtr& node);
    virtual void traverse(IVisitor* visitor);
private:
    NameTokPtr _name;
    ExprTypeList _bases;
    StmtTypeList _body;
    DecoratorsTypeList _decs;
    KeywordTypeList _keywords;
    exprTypePtr _starargs;
    exprTypePtr _kwargs;
};




#endif